Java তে copying একটি অবজেক্ট বা ডাটা স্ট্রাকচার তৈরি করার সময় দুটি সাধারণ ধরনের কপি অপারেশন থাকে: Shallow Copy এবং Deep Copy। এগুলি অবজেক্টের কপি তৈরি করার প্রক্রিয়া এবং কিভাবে রেফারেন্স এবং ডাটা কপি করা হয় তার ওপর নির্ভর করে ভিন্ন হয়।
Shallow Copy (শ্যালো কপি)
Shallow Copy হল একটি কপি অপারেশন যেখানে নতুন অবজেক্টের মধ্যে কেবলমাত্র অবজেক্টের রেফারেন্স কপি করা হয়, অর্থাৎ মূল অবজেক্টের উপাদানগুলির মধ্যে যে রেফারেন্স থাকে তা নতুন কপিতে কপি হয়। তবে, এর মধ্যে অবজেক্টের আসল কন্টেন্ট (অথবা ডাটা) কপি হয় না। অর্থাৎ, শ্যালো কপি করলে মূল অবজেক্ট এবং কপি করা অবজেক্ট একই অর্গানিক বা ডাটা স্ট্রাকচার শেয়ার করতে পারে।
Shallow Copy Example:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class ShallowCopyExample {
public static void main(String[] args) {
Person person1 = new Person("Alice", 30);
Person person2 = person1; // Shallow copy (just reference is copied)
System.out.println(person1.name); // Output: Alice
System.out.println(person2.name); // Output: Alice
person2.name = "Bob"; // Modify person2
System.out.println(person1.name); // Output: Bob (since both refer to same object)
System.out.println(person2.name); // Output: Bob
}
}
Explanation:
person2 = person1;লাইনটি একটি shallow copy তৈরি করে। এখানে,person2একটি নতুন অবজেক্ট তৈরি করে না, বরং এটিperson1এর রেফারেন্স শেয়ার করে।- যখন
person2এরnameপরিবর্তন করা হয়, তখনperson1এরও একই পরিবর্তন ঘটে, কারণ তারা একই অবজেক্টের দিকে রেফারেন্স করছে।
Deep Copy (ডিপ কপি)
Deep Copy হল একটি কপি অপারেশন যেখানে মূল অবজেক্টের কন্টেন্ট (অথবা ডাটা) সম্পূর্ণভাবে কপি করা হয়, এবং এই কপি নতুন একটি অবজেক্ট হিসেবে তৈরি হয়। এর মানে হল যে, মূল অবজেক্ট এবং কপি করা অবজেক্ট একে অপরের থেকে স্বাধীন থাকে, এবং একটি অবজেক্টে পরিবর্তন করলে অন্যটির ওপর কোনো প্রভাব পড়ে না। ডিপ কপি সাধারণত recursive copy এর মাধ্যমে কাজ করে, যেখানে অবজেক্টের ভিতরে থাকা অন্য অবজেক্টগুলিও কপি করা হয়।
Deep Copy Example:
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
// Deep copy constructor
public Person(Person other) {
this.name = other.name;
this.age = other.age;
}
}
public class DeepCopyExample {
public static void main(String[] args) {
Person person1 = new Person("Alice", 30);
Person person2 = new Person(person1); // Deep copy (new object with copied data)
System.out.println(person1.name); // Output: Alice
System.out.println(person2.name); // Output: Alice
person2.name = "Bob"; // Modify person2
System.out.println(person1.name); // Output: Alice (no change in person1)
System.out.println(person2.name); // Output: Bob (change in person2)
}
}
Explanation:
Person person2 = new Person(person1);লাইনটি একটি deep copy তৈরি করে, যেখানেperson2একটি নতুন অবজেক্ট তৈরি করে এবংperson1এর সমস্ত ডাটা কপি করে।person2এরnameপরিবর্তন করলেperson1এর উপর কোনো প্রভাব পড়ে না, কারণ তারা একে অপরের থেকে স্বাধীন।
Shallow Copy এবং Deep Copy এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Shallow Copy | Deep Copy |
|---|---|---|
| কপি কী হয় | শুধুমাত্র অবজেক্টের রেফারেন্স কপি হয়, আসল ডাটা শেয়ার করা হয়। | পুরো অবজেক্টের কন্টেন্ট বা ডাটা কপি করা হয়, নতুন অবজেক্ট তৈরি হয়। |
| রেফারেন্স কপি | রেফারেন্স কপি করা হয়, অর্থাৎ নতুন অবজেক্ট পুরোনো অবজেক্টের রেফারেন্স শেয়ার করে। | নতুন অবজেক্ট তৈরি হয়, পুরোনো অবজেক্টের ডাটা কপি করা হয়। |
| প্রভাব | মূল অবজেক্ট এবং কপি করা অবজেক্ট একই ডাটা শেয়ার করে, তাই একটিতে পরিবর্তন হলে অন্যটিতেও পরিবর্তন হয়। | মূল অবজেক্ট এবং কপি করা অবজেক্ট একে অপরের থেকে স্বাধীন থাকে। |
| উদাহরণ | person2 = person1; — শুধু রেফারেন্স কপি। | person2 = new Person(person1); — সম্পূর্ণ কপি, নতুন অবজেক্ট। |
| কখন ব্যবহার করবেন | যখন ডাটা শেয়ার করার প্রয়োজন থাকে এবং ডাটা পরিবর্তন হলে অন্য অবজেক্টেও প্রভাব পরতে পারে না এমন ক্ষেত্রে। | যখন দুটি অবজেক্ট একে অপর থেকে সম্পূর্ণভাবে স্বাধীন থাকতে হবে। |
- Shallow Copy দ্রুত এবং কম মেমরি ব্যবহার করে, তবে এটি মূল এবং কপি করা অবজেক্টের মধ্যে ডাটা শেয়ার করে, তাই একটির পরিবর্তন অন্যটির উপরে প্রভাব ফেলতে পারে।
- Deep Copy ডাটা এবং অবজেক্টের মধ্যে সম্পূর্ণ স্বাধীনতা নিশ্চিত করে, কিন্তু এটি বেশি মেমরি ব্যবহার করে এবং কিছুটা ধীর হতে পারে।
আপনি কোনটি ব্যবহার করবেন তা আপনার প্রয়োজনে এবং সমস্যার প্রকারের উপর নির্ভর করে।
Read more